package com.time.thread.jiaohu;

/**
 * @program: tes
 * @description: 5个销售员，每个销售员卖出一个货品后不可以得出相同的剩余数量，
 * 必须在每一个销售员卖完一个货品后其他销售员才可以在新的剩余物品数上继续减1操作。
 * 这时就需要使多个线程之间进行同步，也就是用按顺序排队的方式进行减1操作
 * @author: xuejingjing
 * @create: 2021-10-19 14:46
 **/
public class SynchronizedThread extends Thread {
    private int count = 5;

    //通过在run方法前加入synchronized关键字，
    // 使多个线程在执行run方法时，以排队的方式进行处理。当一个线程调用run前，先判断run方法有没有被上锁，
    // 如果上锁，说明有其他线程正在调用run方法，必须等其他线程对run方法调用结束后才可以执行run方法。
    // 这样也就实现了排队调用run方法的目的，也就达到了按顺序对count变量减1的效果了。
    // synchronized可以在任意对象及方法上加锁，而加锁的这段代码称为“互斥区”或“临界区”。
    @Override
    synchronized  public void run() {
        super.run();
        count--;
        System.out.println("由"+this.currentThread().getName()+"计算,count="+count);
    }
}
